package com.longtop.framework.sys.user.web;

import java.util.HashMap;
import java.util.Map;

import com.longtop.framework.base.BaseAction;
import com.longtop.framework.security.BaseCheckedException;
import com.longtop.framework.security.SessionObject;
import com.longtop.framework.sys.user.model.TSysUserGy;
import com.longtop.framework.sys.user.service.UserGyService;
import com.longtop.framework.sys.user.service.UserService;
import com.longtop.framework.util.WebUtil;
import com.longtop.intelliweb.action.IActionContext;
import com.longtop.intelliweb.action.IInitContext;
import com.longtop.intelliweb.view.Dataset;

/**
 * 系统管理--柜员信息
 * 
 * @author 杨向阳
 * 
 */
public class UserGyListAction extends BaseAction {

	private final static String DATASET_USER_GY = "Dataset_UserGy";

	/**
	 * 系统共用：初始化调用
	 */
	public void init(IInitContext context) {
		super.init(context);
	}

	/**
	 * 本页jsp：初始化业务数据(覆写父类方法)
	 */
	public void thisPageInit(IInitContext context) {

		// 获取dataset,验证数据集对象是否存在
		Dataset dataset = this.getDataset(context, DATASET_USER_GY);
		if (!WebUtil.validateDatasetExist(this, dataset, DATASET_USER_GY)) {
			return;
		}

		UserService userService = getBean(UserService.BEAN_ID);
		// 根据用户数据权限，设置默认机构值：权限控制
		String orgId = userService.getOrgIdByAuth(context);

		HashMap<String, Object> queryMap = new HashMap<String, Object>();
		queryMap.put("orgId", orgId);
		userService.queryForPageByIbatis("sysUserSql.queryUserGyList", null, queryMap, dataset, false);

	}

	/**
	 * 自定义查询
	 * 
	 * @param context
	 */
	public void searchUserGy(IActionContext context) {

		// 调用公用查询方法
		commonQuery(context, true);
	}

	/**
	 * 执行翻页查询
	 * 
	 * @param context
	 */
	public void loadUserGy(IActionContext context) {

		// 调用公用查询方法
		commonQuery(context, false);
	}

	/**
	 * 保存、修改、删除一起做！
	 * 
	 * @param context
	 */
	public void saveUserGy(IActionContext context) {

		Dataset dataset = context.getDataset(DATASET_USER_GY); // 获取页面上的dataset的结构

		// 验证数据集是否存在及是否有变化
		if (!WebUtil.validateDatasetChange(this, dataset, DATASET_USER_GY)) {
			return;
		}

		UserGyService userGyService = this.getBean(UserGyService.BEAN_ID); // 调用Spring的业务逻辑类

		try {
			// 把dataset转成要删除的主键列表、新增bean及更新bean列表
			Map changeMap = WebUtil.datasetToObjectList(dataset, "id", TSysUserGy.class);

			// 获得SessionObject对象,得到用户对象
			SessionObject sessionObject = this.getSessionObject(context);

			// 调用业务逻辑层的批量更新方法(在一个事务内实现)
			Integer[] count = userGyService.saveUserGy(changeMap, sessionObject);

			// 向JSP页面传递操作结果信息
			this.hintInfoMessage(WebUtil.getSubmitSuccessInfo(count[0].intValue(), count[1].intValue(), count[2].intValue()));
		} catch (BaseCheckedException e) {
			// 在界面显示错误信息
			this.hintErrorMessage(e.getMessage());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 通用查询.将数据查询出来，拼装数据。
	 * 
	 * @param object
	 *            上下文：IInitContext或IActionContext
	 * @param isFirstPageNoo
	 *            是否从第一页开始查询！
	 */
	private void commonQuery(IActionContext context, boolean isFirstPageNo) {

		UserGyService userGyService = getBean(UserGyService.BEAN_ID); // 调用Spring的业务逻辑类
		Dataset dataset = this.getDataset(context, DATASET_USER_GY);

		// 查询条件
		String userId = context.getElementValue("Text_userId");
		String gyId = context.getElementValue("Text_gyId");
		String orgId = context.getElementValue("Text_orgId");
		HashMap<String, Object> queryMap = new HashMap<String, Object>();
		queryMap.put("userId", userId);
		queryMap.put("gyId", gyId);
		queryMap.put("orgId", orgId);

		// 当前第几页
		if (isFirstPageNo)
			dataset.setPageNo(1);

		userGyService.queryForPageByIbatis("sysUserSql.queryUserGyList", null, queryMap, dataset, false);
	}
}